A virtual machine (VM) is a portion of software that, when executed on appropriate hardware, creates an environment allowing the virtualization of an actual physical computer system. Each VM may function as a self-contained platform, running its own operating system (OS) and software applications (processes). Typically, a hypervisor manages allocation and virtualization of computer resources and performs context switching to cycle between various VMs.
A host machine (e.g., computer or server) is typically enabled to simultaneously run multiple VMs, where each VM may be accessed and/or connected from a local or remote client. The host machine allocates a certain amount of the host's resources to each of the VMs. Each VM is then able to use the allocated resources to execute applications, including operating systems known as guest operating systems. The hypervisor virtualizes the underlying hardware of the host machine or emulates hardware devices.
In a virtualized data center, clients may connect to VMs using a remote access protocol, such as Virtual Network Computing (VNC), Remote Desktop Protocol (RDP), Independent Computing Architecture (ICA), or Simple Protocol for Independent Computing Environments (SPICE). The remote access protocol provides client access to a remote machine display and devices (e.g., keyboard, mouse, audio) to allow the user to experience a similar interaction as with a local machine.
In remote communication connections, such as in the above-described virtualization topology, sending images remotely from a VM to a client device can be costly in terms of bandwidth and latency. If an image associated with a VM is transferred slowly at the client device displaying the VM, the end user of the VM notices such a performance slow down and may be disappointed.
To improve the experience, remote access protocols may utilize a cache of images, which are stored in the client device's memory. The images may be identified by a unique identifier (ID), such as a hash, which is generated by the VM and/or the hypervisor at the host machine. The image itself, along with its unique ID, is passed to the client device the first time this image is seen by the VM. Consequently, when the same image is to be sent from the VM to the client device, the VM sends along with the unique ID of the image without the image itself. Typically, when a client device first loads, there are no images associated with the VM, and, as a result, an entire image file is sent to the client device anytime an image is loaded by the VM for the first time.